home *** CD-ROM | disk | FTP | other *** search
/ Turnbull China Bikeride / Turnbull China Bikeride - Disc 2.iso / BARNET / FREENET / BRODIE / INTERNET / !InternetD / c / opensocks < prev    next >
Text File  |  1995-06-08  |  3KB  |  122 lines

  1. /* opensocks.c / openfiles.c */
  2.  
  3. #include <stdio.h>
  4. #include <string.h>
  5. #include <stdlib.h>
  6. #include <ctype.h>
  7. #include "netinet/in.h"
  8. #include "sys/socket.h"
  9. #include "sys/byteorder.h"
  10. #include "arpa/inet.h"
  11. #include "netdb.h"
  12. #include "oslib:osargs.h"
  13.  
  14. static void strlwr(char *c)
  15. {
  16.         while (*c) {
  17.                 *c = tolower(*c); ++c;
  18.         }
  19. }
  20.  
  21. static void port(char *buffer, int port2, int sock)
  22. {
  23.     struct servent *s;
  24.         char *proto;
  25.         char buf[16];
  26.         int len = 16;
  27.         int res;
  28.  
  29.         res  = getsockopt(sock, SOL_SOCKET, SO_TYPE, buf, len);
  30.         if (res != -1) switch (*buf) {
  31.                 case SOCK_STREAM: proto="tcp"; break;
  32.                 case SOCK_DGRAM: proto="udp"; break;
  33.                 case SOCK_RAW: proto="icmp"; break;
  34.                 default: proto=""; break;
  35.         }
  36.         else proto = "";
  37.  
  38.     s = getservbyport(port2, (*proto)?proto:NULL);
  39.  
  40.     if (s) {
  41.             strcat(buffer, s->s_name);
  42.         strcat(buffer, "/");
  43.                 strcat(buffer, proto);
  44.     }
  45.     else {
  46.             sprintf(buf, "%d/%s", ntohs(port2),proto);
  47.             strcat(buffer, buf);
  48.     }
  49.  
  50. }
  51.  
  52. static char *ip(int s, struct sockaddr_in *sin)
  53. {
  54.         static char    buffer[128];
  55.         struct hostent *host;
  56.  
  57.         strcpy(buffer, inet_ntoa(sin->sin_addr));
  58.         if (sin->sin_addr.s_addr == INADDR_ANY) {
  59.                 strcpy(buffer, "[INADDR_ANY]");
  60.         } else if ((sin->sin_addr.s_addr & 0xff) == 0x7f) {
  61.                 strcpy(buffer, "[localhost]");
  62.         } else {
  63.                 host = gethostbyaddr((char *)&sin->sin_addr, 4, AF_INET);
  64.                 if (host) {
  65.                         strcpy(buffer, host->h_name);
  66.                 }
  67.         }
  68.  
  69.     strcat(buffer, " (");
  70.     port(buffer, sin->sin_port, s);
  71.     return strcat(buffer, ")");
  72. }
  73.  
  74. static int opensocks(void)
  75. {
  76.         struct sockaddr_in    sin;
  77.         int            size;
  78.         int            s;
  79.     extern int gettsize(void);
  80.     int            maxs = gettsize();
  81.  
  82.         for (s=0; s<maxs; ++s) {
  83.                 size = 16;
  84.                 if (getsockname(s, (struct sockaddr *)&sin, &size) < 0) continue;
  85.  
  86.                 printf("%8d %s", s, ip(s,&sin));
  87.                 size = 16;
  88.                 if (getpeername(s, (struct sockaddr *)&sin, &size) > -1) {
  89.                         printf(" <---> %s", ip(s,&sin));
  90.                 }
  91.                 putchar('\n');
  92.         }
  93.  
  94.         return 0;
  95. }
  96.  
  97. static int openfiles(void)
  98. {
  99.         int     t,spare,ptr,ext;
  100.         bits    stream_status, fs_status;
  101.         char    name[256];
  102.  
  103.     printf("Handle Extent CPointer Name\n");
  104.         for (t=255; t>0; --t) {
  105.                 osargs_read_info((os_f) t, &stream_status, &fs_status);
  106.                 if (stream_status & osargs_STREAM_UNALLOCATED) continue;
  107.         ext = osargs_read_ext((os_f) t);
  108.         ptr = osargs_read_ptr((os_f) t);
  109.                 osargs_read_path((os_f) t, name, 256, &spare);
  110.                 printf("%4d %8X %8X %s\n", t, ext, ptr, name);
  111.         }
  112.         return 0;
  113. }
  114.  
  115. int main(int argc, char *argv[])
  116. {
  117.         argc=argc;
  118.         strlwr(argv[0]);
  119.         if (strstr(argv[0],"opensocks")) return opensocks();
  120.         else return openfiles();
  121. }
  122.